const loaderUtils = require("loader-utils");

/**
 *
 * @param {buffer} buffer 图片的二进制buffer数据
 * @returns {string} 图片的路径或base64编码的图片数据
 * @returns
 */
function loader(buffer) {
  //给的是buffer
  const { limit = 1000, filename = "[contenthash].[ext]" } =
    loaderUtils.getOptions(this); // 获取loader的配置项

  let content = "";
  if (buffer.byteLength >= limit) {
    content = getFilePath.call(this, buffer, filename);
  } else {
    content = getBase64(buffer);
  }

  return `module.exports = \`${content}\``;
}

/**
 *
 * @param {buffer} buffer 图片的二进制buffer数据
 * @returns {string} base64编码的图片数据
 */
function getBase64(buffer) {
  return "data:image/png;base64," + buffer.toString("base64");
}

function getFilePath(buffer, name) {
  // 使用loaderUtils.interpolateName方法，根据配置项生成图片的名称
  const filename = loaderUtils.interpolateName(this, name, {
    content: buffer,
  });
  this.emitFile(filename, buffer); // 向最终的chunk中加入一个图片文件
  return filename;
}

loader.raw = true; //该loader要处理的是原始数据

module.exports = loader;
